#! /bin/sh
# PCP QA Test No. 034
# pmlogger with different logging rates
#
# Copyright (c) 1995-2002 Silicon Graphics, Inc.  All Rights Reserved.
#

seq=`basename $0`
echo "QA output created by $seq"

# get standard filters
. ./common.product
. ./common.filter

trap "rm -f $tmp.*; exit" 0 1 2 3 15
$sudo rm -f $seq.full

# real QA test starts here
#

# Logs are built for 70 samples (-s70) (see Makefile)
# The sample metric rates are 100msec, 500msec, 900msec
# Theoretically,....
# This means that (x + x/5 + x/9 = 70) for integral x.
# => 59x = 70 * 45
# => x ~= 53.39
# But x is integral
# So, x = 54, x/5 = 10, x/9 = 6 (54 + 10 + 6 = 70)
#
# Note below that n[i] is not incremented on its 1st occurrence
# => expect values of 53, 9, 5

for arch in tmparch/bar tmparch/mv-bar tmparch/noti-bar
do
    echo | tee -a $here/$seq.full
    echo "=== $arch ===" | tee -a $here/$seq.full
    pmdumplog $arch \
    | sed \
	-e '/^[0-9]/{
s/[0-9][0-9]* metrics*//
N
s/\n/ /
}' \
	-e 's/:/ /g' \
	-e '/(pmcd\./d' \
    | $PCP_AWK_PROG '
/^[0-9]/	{ print $3,$NF }' \
    | tee -a $here/$seq.full \
    | $PCP_AWK_PROG '
	    { if (l[$2] != "") {
		delta = $1 - l[$2];
		if (delta < 0)
		    delta += 60;
		# print $2,delta
		t[$2] += delta
		n[$2]++
	      }
	      l[$2] = $1
	    }
    END	{ for (i in n) {
		#debug# print i,t[i],n[i]
		printf "%d msec requested: ",i
		if (n[i] != 0)
		    ave = 1000*t[i]/n[i]
		else
		    ave = 0
		if (i == 100 && 51 <= n[i] && n[i] <= 54)
		    printf "no. of samples within range, "
		else if (i == 500 && 9 <= n[i] && n[i] <= 11)
		    printf "no. of samples within range, "
		else if (i == 900 && 4 <= n[i] && n[i] <= 6)
		    printf "no. of samples within range, "
		else
		    printf "no. of samples (%d) unexpected, ",n[i]," not in range 4 ... 6"
		if (0.9 * i <= ave && ave <= 1.1 * i)
		    printf "avg within 10%% of requested delay\n"
		else
		    printf "avg (%.2f msec) outside 10%% of requested delay range %.2f ... %.2f msec\n",1000*t[i]/n[i],0.9*i,1.1*i
	      }
	    }' \
    | LC_COLLATE=POSIX sort
done
